home *** CD-ROM | disk | FTP | other *** search
/ Dr. Windows 3 / dr win3.zip / dr win3 / UTILITY1 / MSWLGO35.ZIP / EXAMPLES / POUR < prev    next >
Text File  |  1991-09-22  |  2KB  |  86 lines

  1. TO BREADTH.DESCEND :NODELIST
  2. BREADTH.DESCEND NEXTLEVEL :NODELIST
  3. END
  4.  
  5. TO BREADTH.FIRST :NODE
  6. BREADTH.DESCEND CHILDREN :NODE
  7. END
  8.  
  9. TO CHILD :PATH :FROM :TO
  10. LOCAL "NEWSTATE
  11. IF EQUALP :FROM :TO [OUTPUT []]
  12. IF EQUALP 0 ITEM 1+:FROM :PATH [OUTPUT []]
  13. IF NOT EQUALP :TO 0 ~
  14.    [IF EQUALP (ITEM :TO BF :PATH) (ITEM :TO :SIZES) [OUTPUT []]]
  15. MAKE "NEWSTATE (NEWSTATE BF :PATH :FROM :TO)
  16. IF MEMBERP :GOAL :NEWSTATE ~
  17.    [WIN (FPUT LIST :FROM :TO FIRST :PATH) :NEWSTATE THROW "WON]
  18. IF MEMBERP :NEWSTATE :OLDSTATES [OUTPUT []]
  19. MAKE "OLDSTATES FPUT :NEWSTATE :OLDSTATES
  20. OUTPUT (LIST FPUT (FPUT LIST :FROM :TO FIRST :PATH) :NEWSTATE)
  21. END
  22.  
  23. TO CHILDLIST :PATH :FROM
  24. IF :FROM < 0 [OP []]
  25. OP SE (CHILDLIST :PATH :FROM-1) ~
  26.       (CHILDLIST1 :PATH :FROM (COUNT :SIZES))
  27. END
  28.  
  29. TO CHILDLIST1 :PATH :FROM :TO
  30. IF :TO < 0 [OP []]
  31. OP SE (CHILDLIST1 :PATH :FROM :TO-1) (CHILD :PATH :FROM :TO)
  32. END
  33.  
  34. TO CHILDREN :PATH
  35. OUTPUT CHILDLIST :PATH (COUNT :SIZES)
  36. END
  37.  
  38. TO EMPTY :LIST
  39. IF EMPTYP :LIST [OUTPUT []]
  40. OUTPUT FPUT 0 EMPTY BF :LIST
  41. END
  42.  
  43. TO NEWSTATE :STATE :FROM :TO
  44. IF EQUALP :TO 0 [OUTPUT REPLACE :STATE :FROM 0]
  45. IF EQUALP :FROM 0 [OUTPUT REPLACE :STATE :TO (ITEM :TO :SIZES)]
  46. IF ((ITEM :FROM :STATE) < ((ITEM :TO :SIZES)-(ITEM :TO :STATE))) ~
  47.    [OUTPUT REPLACE (REPLACE :STATE :FROM 0) :TO ~
  48.                    (SUM ITEM :FROM :STATE ITEM :TO :STATE)]
  49. OUTPUT REPLACE (REPLACE :STATE :TO (ITEM :TO :SIZES)) :FROM ~
  50.                ((ITEM :FROM :STATE)-((ITEM :TO :SIZES)-(ITEM :TO :STATE)))
  51. END
  52.  
  53. TO NEXTLEVEL :NODELIST
  54. IF EMPTYP :NODELIST [OUTPUT []]
  55. OP SE (CHILDREN FIRST :NODELIST) (NEXTLEVEL BF :NODELIST)
  56. END
  57.  
  58. TO PFORM :BUCKET
  59. IF EQUALP :BUCKET 0 [OUTPUT "RIVER]
  60. OUTPUT ITEM :BUCKET :SIZES
  61. END
  62.  
  63. TO POUR :SIZES :GOAL
  64. LOCAL "OLDSTATES
  65. MAKE "OLDSTATES (LIST EMPTY :SIZES)
  66. CATCH "WON [BREADTH.FIRST FPUT [] EMPTY :SIZES]
  67. END
  68.  
  69. TO REPLACE :LIST :INDEX :VALUE
  70. IF EQUALP :INDEX 1 [OUTPUT FPUT :VALUE BF :LIST]
  71. OUTPUT FPUT FIRST :LIST (REPLACE BF :LIST (:INDEX-1) :VALUE)
  72. END
  73.  
  74. TO WIN :MOVES :STATE
  75. WIN1 :MOVES
  76. PRINT SE [FINAL QUANTITIES ARE] :STATE
  77. END
  78.  
  79. TO WIN1 :MOVES
  80. IF EMPTYP :MOVES [STOP]
  81. PRINT (SE [POUR FROM] (PFORM FIRST LAST :MOVES) ~
  82.           [TO] (PFORM LAST LAST :MOVES))
  83. WIN1 BL :MOVES
  84. END
  85.  
  86.